sql

您所在的位置:网站首页 每个group by必须包含一个不是外部引用的列是什么意思 sql

sql

2024-06-16 03:47| 来源: 网络整理| 查看: 265

7 个答案:

答案 0 :(得分:25)

首先,你不能这样做:

having rid!=MAX(rid)

HAVING子句只能包含聚合组属性的内容。

此外,1, 2, 3在SQL Server中的GROUP BY中无效 - 我认为这仅在ORDER BY中有效。

你能解释为什么这不是你想要的:

select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound, MAX(qvalues.rid) from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound

答案 1 :(得分:16)

好吧,正如之前所说的那样,你不能GROUP文字,我认为你很困惑,因为你可以{1,2}增加1,2,3。当你使用函数作为你的列,您需要通过相同的表达式GROUP。此外,HAVING子句是错误的,你只能使用agreggations中的内容。在这种情况下,您的查询应该是这样的:

ORDER

答案 2 :(得分:11)

您不能按文字分组,只能按列分组。

你可能正在寻找这样的东西:

select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1) as pathinfo, qvalues.name, qvalues.compound, qvalues.rid from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by pathinfo, qvalues.name, qvalues.compound having rid!=MAX(rid)

首先,您必须为第一个表达式赋予as列名称。然后,您必须按表达式指定组中列的名称。

答案 3 :(得分:0)

当您使用GROUP BY时,您还需要对不在group by子句中的列使用聚合函数。

我不确切地知道你要做什么,但我想这会奏效:

select LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound, MAX(qvalues.rid) from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid where LEN(datapath)>4 group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1), qvalues.name, qvalues.compound having rid!=MAX(rid)

修改强> 我在这里要做的是group by,所有字段都是rid。如果这不是您想要的,那么为了获得有效的SQL语句,您需要做的是按字段为每个被删除的组添加聚合函数调用...

答案 4 :(得分:0)

我认为您没有正确使用GROUP BY。

GROUP BY的要点是在执行数学/聚合函数之前,将表组织成基于某一列或多列的部分。

例如,在此表中:

Name Age Salary Bob 25 20000 Sally 42 40000 John 42 90000

SELECT语句可以是GROUP BY名称(Bob,Sally和John各自是独立的组),Age(Bob将是一个组,Sally和John将是另一个组),或Salary(与名称几乎相同的结果)

按“1”分组没有任何意义,因为“1”不是列名。

答案 5 :(得分:0)

这是一个简单的查询,用于查找药品类型为A且超过2的公司名称。

SELECT CNAME FROM COMPANY WHERE CNO IN ( SELECT CNO FROM MEDICINE WHERE type='A' GROUP BY CNO HAVING COUNT(type) > 2 )

答案 6 :(得分:0)

我刚发现这个错误。,在select查询中的group by子句中使用GETDATE()[即外部引用]。

当用相应的表中的日期列替换它时,它被清除。

想分享一个简单的例子。干杯;)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3